/**
 * Prompt Template Types
 * 
 * 提示词工程系统的核心类型定义
 */

/**
 * 提示词变量类型
 */
export type PromptVariableType = 'text' | 'number' | 'select' | 'textarea' | 'boolean';

/**
 * 提示词变量定义
 */
export interface PromptVariable {
  /** 变量名 */
  name: string;
  /** 显示标签 */
  label: string;
  /** 变量类型 */
  type: PromptVariableType;
  /** 默认值 */
  defaultValue?: string | number | boolean;
  /** 描述说明 */
  description?: string;
  /** 是否必填 */
  required?: boolean;
  /** 选项列表 (type=select 时使用) */
  options?: Array<{ label: string; value: string }>;
  /** 占位符 */
  placeholder?: string;
}

/**
 * 提示词类别
 */
export type PromptCategory = 
  | 'code'          // 代码相关
  | 'writing'       // 写作相关
  | 'analysis'      // 分析相关
  | 'translation'   // 翻译相关
  | 'education'     // 教育相关
  | 'business'      // 商务相关
  | 'creative'      // 创意相关
  | 'research'      // 研究相关
  | 'other';        // 其他

/**
 * 提示词模板
 */
export interface PromptTemplate {
  /** 唯一标识 */
  id: string;
  /** 模板名称 */
  name: string;
  /** 模板描述 */
  description: string;
  /** 类别 */
  category: PromptCategory;
  /** 模板内容 (使用 {{variable}} 语法) */
  template: string;
  /** 变量定义 */
  variables: PromptVariable[];
  /** 示例用法 */
  examples?: string[];
  /** 最佳实践建议 */
  bestPractices?: string[];
  /** 标签 */
  tags?: string[];
  /** 是否内置 */
  isBuiltin?: boolean;
  /** 使用次数 */
  usageCount?: number;
  /** 评分 (1-5) */
  rating?: number;
  /** 创建者 */
  author?: string;
  /** 创建时间 */
  createdAt?: Date;
  /** 更新时间 */
  updatedAt?: Date;
}

/**
 * 提示词模板版本
 */
export interface PromptTemplateVersion {
  /** 版本号 */
  version: number;
  /** 模板内容 */
  template: string;
  /** 变量定义 */
  variables: PromptVariable[];
  /** 变更说明 */
  changelog?: string;
  /** 创建时间 */
  createdAt: Date;
}

/**
 * 提示词优化建议
 */
export interface PromptOptimizationSuggestion {
  /** 优化类型 */
  type: 'clarity' | 'specificity' | 'structure' | 'context' | 'examples';
  /** 建议标题 */
  title: string;
  /** 建议描述 */
  description: string;
  /** 原始文本 */
  original?: string;
  /** 优化后的文本 */
  optimized?: string;
  /** 优先级 (1-5) */
  priority?: number;
}

/**
 * 提示词质量评分
 */
export interface PromptQualityScore {
  /** 总分 (0-100) */
  overall: number;
  /** 清晰度 (0-100) */
  clarity: number;
  /** 具体性 (0-100) */
  specificity: number;
  /** 结构化 (0-100) */
  structure: number;
  /** 上下文 (0-100) */
  context: number;
  /** 建议列表 */
  suggestions: PromptOptimizationSuggestion[];
}

/**
 * 提示词优化结果
 */
export interface PromptOptimizationResult {
  /** 原始提示词 */
  original: string;
  /** 优化后的提示词 */
  optimized: string;
  /** 改进点 */
  improvements: string[];
  /** 推理过程 */
  reasoning: string;
  /** 质量评分 */
  score?: PromptQualityScore;
}

/**
 * 提示词模板集合
 */
export interface PromptTemplateCollection {
  /** 集合名称 */
  name: string;
  /** 集合描述 */
  description: string;
  /** 模板列表 */
  templates: PromptTemplate[];
  /** 创建时间 */
  createdAt: Date;
}

/**
 * 提示词使用统计
 */
export interface PromptUsageStats {
  /** 模板 ID */
  templateId: string;
  /** 使用次数 */
  usageCount: number;
  /** 最后使用时间 */
  lastUsedAt: Date;
  /** 平均评分 */
  averageRating: number;
  /** 总评分次数 */
  ratingCount: number;
}

